//
//  KLMAnimationView.swift
//  KLM_GN
//
//  Created by Nic on 2025/3/24.
//

import UIKit
import Lottie

class KLMAnimationView: UIView {
    
    private let animationView = LottieAnimationView()
    
    /// 是否循环播放（默认：true）
    var isLooping: Bool = true {
        didSet {
            animationView.loopMode = isLooping ? .loop : .playOnce
        }
    }
    
    /// 动画播放速度（默认：1.0）
    var animationSpeed: CGFloat = 1.0 {
        didSet {
            animationView.animationSpeed = animationSpeed
        }
    }
    
    /// 动画完成回调
    var completionHandler: ((Bool) -> Void)?
    
    // MARK: - Init
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupView()
    }
    
    private func setupView() {
        animationView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(animationView)
        
        animationView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
    }
    
    // MARK: - Public Methods
    
    /// 配置动画参数
    /// - Parameters:
    ///   - animationName: JSON 文件名（不带扩展名）
    ///   - bundle: 资源所在的 bundle（默认：main bundle）
    func configure(animationName: String, bundle: Bundle = .main) {
        let animation = LottieAnimation.named(animationName, bundle: bundle)
        animationView.animation = animation
        animationView.contentMode = .scaleAspectFit
    }
    
    /// 播放动画
    /// - Parameter fromProgress: 起始进度（默认：0）
    func play(fromProgress: AnimationProgressTime = 0) {
        animationView.play(fromProgress: fromProgress,
                           toProgress: 1,
                           loopMode: isLooping ? .loop : .playOnce,
                           completion: completionHandler)
    }
    
    /// 暂停动画
    func pause() {
        animationView.pause()
    }
    
    /// 停止动画
    func stop() {
        animationView.stop()
    }
    
    /// 设置内容模式
    func setContentMode(_ mode: UIView.ContentMode) {
        animationView.contentMode = mode
    }
    
    // MARK: - Lifecycle
    
    func hide() {
        removeFromSuperview()
        stop()
    }
    
//    override func removeFromSuperview() {
//        super.removeFromSuperview()
//        stop()
//    }
}
